#include "Hash.h"

Bytes Hash::calcularHash(Bytes dato) {

	string aux = this->hasher.calcularSha1(dato.toString());

	return Bytes(aux);
}

offset Hash::crearDireccion(Key &clave, cantBytes cantidad) {

	Bytes serializacion = clave.serializarse();
	Bytes hash = calcularHash(serializacion);

	return crearDireccion(hash,cantidad);
}

offset Hash::crearDireccion(Bytes hash, cantBytes cantidadBits) {

	offset resultado = 0;
	offset valorHash;
	bool exito = hash.leer(&valorHash,0,sizeof(offset));

	if (!exito) {
		cerr << "Error: El hash en Bytes es muy chico" << endl;
		return 0;
	}

	for (unsigned i = 0; i < cantidadBits; i++) {
		resultado = resultado << 1;
		int bitMenor = valorHash & 1;
		resultado = resultado | bitMenor;
		valorHash = valorHash >> 1;
	}

	return resultado;
}
